package com.aqie.easy.bitOperation;

/**
 * 461. 汉明距离
 * 二进制位不同的位置的数目
 * 2^7 = 128
 * 真值 ： 最高位1代表负
 * 原码 ：
 * 反码 ： 负数反码在其原码基础上，符号位不变,其余各位取反
 * 补码：  负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1.(即反码+ 1)
 *  +  解决了0的符号以及两个编码的问题
 *
 * 与& (串联)     ： 1）清零  2）取指定位
 * 或| (并联)     ： 1）
 * 异或 ^         ：     同真异假 与1翻转 与0不变;
 * 左移 <<        : 每左移一位相当于乘2
 * 右移 >>        :
 * 无符号右移 >>>  :
 */
public class HammingDistance {
    public static int hammingDistance(int x, int y) {
        // 3  0000 0011
        // 5  0000 0101
        // ^  0000 0110
        int z = x ^ y;
        return Integer.bitCount(z);
    }

    public static void main(String[] args) {
        System.out.println(hammingDistance(3,5));
    }
}
